AWS ParallelCluster で M7i / M7a インスタンスは利用可能なのか確認してみた
東京リージョンで「M7i」「M7i-flex」「M7a」「R7a」が利用可能になりました。AWS ParallelCluster でこれら最新のインスタンスタイプの Intel CPU, AMD CPU を利用できるのか確認してみました。
- 東京リージョンで「M7i」「M7i-flex」 最新 Intel CPUを搭載した 汎用EC2インスタンスが利用可能になりました | DevelopersIO
- アジアパシフィック (東京) リージョンで Amazon EC2 M7a および R7a インスタンスの提供を開始
確認結果
実行環境は AWS ParallelCluster 3.8 で確認しています。
- AWS ParallelCluster は M7i と M7a インスタンスタイプの起動に対応していた
- M7a インスタンスタイプはマルチレディングを無効化してもコア数に変化はなくコスパ良好である
- M7i / M7a インスタンスタイプともにインスタンスストア付きの
d
タイプは未提供(2024/2/6 現在)
スポットインスタンスを活用していく
最近の世代のインスタンスタイプは前世代と比べると最新 CPU により性能が向上しますが、オンデマンド利用費も高く設定される傾向にあります。一般的には費用対効果を見て採用を検討することにならいます。ですが、ParallelCluster で計算リソースとして利用する場合は積極的にスポットインスタンスを活用していきたいところです。なぜなら、登場して間もない頃は利用者も少なく安く使えるからです。
例えば Graviton を除く、C 系、M 系のインスタンスタイプで 16vCPU 以上、64GB メモリ以上のスペックでスポット利用費を安い順に表示してみます。
$ spotinfo --region ap-northeast-1 --sort price --type "^[m|c][^g]*\." --cpu 16 --memory 64 ┌──────────────────┬──────┬────────────┬────────────────────────┬───────────────────────────┬──────────┐ │ INSTANCE INFO │ VCPU │ MEMORY GIB │ SAVINGS OVER ON-DEMAND │ FREQUENCY OF INTERRUPTION │ USD/HOUR │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m7i-flex.4xlarge │ 16 │ 64 │ 77% │ <5% │ 0.2303 │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m7i.4xlarge │ 16 │ 64 │ 77% │ <5% │ 0.239 │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m7a.4xlarge │ 16 │ 64 │ 78% │ <5% │ 0.2599 │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m6a.4xlarge │ 16 │ 64 │ 70% │ <5% │ 0.2707 │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m4.10xlarge │ 40 │ 160 │ 89% │ 5-10% │ 0.29 │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m5a.4xlarge │ 16 │ 64 │ 65% │ <5% │ 0.3142 │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m6i.4xlarge │ 16 │ 64 │ 68% │ <5% │ 0.317 │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m4.4xlarge │ 16 │ 64 │ 67% │ <5% │ 0.338 │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m6in.4xlarge │ 16 │ 64 │ 76% │ <5% │ 0.3408 │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m5zn.6xlarge │ 24 │ 96 │ 86% │ <5% │ 0.3577 │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤ │ m6id.4xlarge │ 16 │ 64 │ 70% │ <5% │ 0.3694 │ ├──────────────────┼──────┼────────────┼────────────────────────┼───────────────────────────┼──────────┤
執筆時点での価格ではありますが新規インスタンスタイプの登場直後は安価に利用できる傾向にあります。性能が向上してかつ、スポット利用費も前世代よりも安いとお得です。
-flex
サフィックス付きのインスタンスタイプの特徴については以下の記事を参照ください。
ParallelCluster で使ってみる
東京リージョンで使用可能になったインスタンスタイプの中で今後もよく使いそうなm7i
とm7a
の起動を試してみました。
# ------ Compute 1 ------ - Name: queue1 ComputeResources: - Name: queue1 Instances: - InstanceType: m7i.8xlarge - InstanceType: m7a.4xlarge MinCount: 0 MaxCount: 20 DisableSimultaneousMultithreading: true
マルチ AZ 起動時は同じ vCPU 数に揃えること
マルチ AZ 起動設定する場合はvCPU 数が同じ数のインスタンスタイプで合わせる必要があります。そして、マルチレッディング(ハイパースレッディング)を無効化することがよくあります。
DisableSimultaneousMultithreading: true
ここで注意したいのは
- AMD の m7a は物理 16 コアでマルチレディング有効でも 16 スレッド
- Intel の m7i は仮想 16 コアでマルチレディングを無効にすると 8 コア
そのため、物理 16 コアでインスタンスタイプを揃えるために、m7i.8xlarge
とm7a.4xlarge
の選択となりました。
AMD の m7a はマルチレディングを無効化にする環境であれば費用対効果が高いです。
ちなみに何も知らずにどちらも4xlarge
の設定でクラスター作成したところ、バリデーションエラーで作成失敗しました。
{ "level": "ERROR", "type": "InstancesCPUValidator", "message": "Instance types listed under Compute Resource queue1 must have the same number of CPU cores when Simultaneous Multithreading is disabled ({'m7i.4xlarge': 8, 'm7a.4xlarge': 16})." }
M7a の特徴については以下の記事を参照ください。
インスタンスストアありますか?
シングルノードで計算時に一時的な利用する高速なストレージ領域としてインスタンスストアを利用するときがあります。現時点ではd
付きのインスタンスタイプは未提供でした。海外リーションでも提供されていなかったため、東京リージョンで利用可能になるのはまだ先になりそうです。
サンプルコンフィグ
以下のコンフィグからクラスターを作成しました。
項目 | 値 |
---|---|
AWS ParallelCluster | 3.8.0 |
OS | Ubuntu 22.04 LTS |
CPU Arch | Intel, AMD(x86_64) |
HeadNode | t3.micro |
ComputeNode | m7i.8xlarge, m7a.4xlarge |
折りたたみ
Region: ap-northeast-1 Image: Os: ubuntu2204 Tags: - Key: Name Value: v380-cluster # ---------------------------------------------------------------- # Head Node Settings # ---------------------------------------------------------------- HeadNode: InstanceType: t3.micro Networking: ElasticIp: false SubnetId: subnet-0c82bb28e119e2aa8 Ssh: KeyName: org-sandbox-keypair LocalStorage: RootVolume: Size: 40 Encrypted: true VolumeType: gp3 Iops: 3000 Throughput: 125 Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore S3Access: - BucketName: hpc-dev-custom-boostrap-files-for-parallelcluster EnableWriteAccess: false # ---------------------------------------------------------------- # Compute Node Settings # ---------------------------------------------------------------- Scheduling: Scheduler: slurm SlurmSettings: ScaledownIdletime: 5 SlurmQueues: # ------ Test 1 ------ - Name: test1 ComputeResources: - Name: test1 Instances: - InstanceType: t3.micro - InstanceType: t3a.micro MinCount: 0 MaxCount: 10 DisableSimultaneousMultithreading: true ComputeSettings: LocalStorage: RootVolume: Size: 40 Encrypted: true VolumeType: gp3 Iops: 3000 Throughput: 125 CapacityType: SPOT AllocationStrategy: capacity-optimized Networking: SubnetIds: - subnet-0c82bb28e119e2aa8 - subnet-0296a0c8515ed3bdc - subnet-0089ff187d1f54258 PlacementGroup: Enabled: false # CustomActions: # OnNodeConfigured: # Script: s3://hpc-dev-custom-boostrap-files-for-parallelcluster/install/apptainer.sh Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore S3Access: - BucketName: hpc-dev-custom-boostrap-files-for-parallelcluster EnableWriteAccess: false # ------ Compute 1 ------ - Name: queue1 ComputeResources: - Name: queue1 Instances: - InstanceType: m7i.8xlarge - InstanceType: m7a.4xlarge MinCount: 0 MaxCount: 20 DisableSimultaneousMultithreading: true ComputeSettings: LocalStorage: RootVolume: Size: 40 Encrypted: true VolumeType: gp3 Iops: 3000 Throughput: 125 CapacityType: SPOT AllocationStrategy: capacity-optimized Networking: SubnetIds: - subnet-0c82bb28e119e2aa8 - subnet-0296a0c8515ed3bdc - subnet-0089ff187d1f54258 PlacementGroup: Enabled: false # CustomActions: # OnNodeConfigured: # Script: s3://hpc-dev-custom-boostrap-files-for-parallelcluster/install/apptainer.sh Iam: AdditionalIamPolicies: - Policy: arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore S3Access: - BucketName: hpc-dev-custom-boostrap-files-for-parallelcluster EnableWriteAccess: false # ---------------------------------------------------------------- # Shared Storage Settings # ---------------------------------------------------------------- SharedStorage: - MountDir: /mnt/hpc-dev-efs-for-parallelcluster Name: efs1 StorageType: Efs EfsSettings: FileSystemId: fs-0846dc947572a66a1 # ---------------------------------------------------------------- # Other Settings # ---------------------------------------------------------------- Monitoring: Logs: CloudWatch: Enabled: true RetentionInDays: 180 DeletionPolicy: "Delete" Dashboards: CloudWatch: Enabled: true
テストジョブ
m7i.8xlarge
とm7a.4xlarge
が起動してくるパーティションで 10 台のコンピュートノードを要求するジョブを実行してみます。
ubuntu@ip-10-0-1-112:~$ cat echo.sh #! /bin/bash #SBATCH -p queue1 #SBATCH -N 10 echo "hello"
実行結果
ジョブ投げて放置していたらコンピュートノードの終了しており、すべてが終わったあとのキャプチャになります。m7i.8xlarge
とm7a.4xlarge
は ParallelCluster からの起動を確認できました。AZ はまばらに分散されていますね。
3 台のコンピュートノード指定でジョブ投げた結果を一応載せておきます。ちゃんと起動できていますね。
まとめ
- AWS ParallelCluster は M7i と M7a インスタンスタイプの起動に対応していた
- M7a インスタンスタイプはマルチレディングを無効化してもコア数に変化はなくコスパ良好である
- M7i / M7a インスタンスタイプともにインスタンスストア付きの
d
タイプは未提供(2024/2/6 現在)
おわりに
最近クラスターのコンフィグを更新して設定を反映させることが多いです。今回もコンピュートノードの設定を変更して更新かけました。手間味噌ですが以下の記事が大変重宝しています。